//
//  main.c
//  BF算法-朴素模式匹配
//
//  Created by Song on 2018/3/14.
//  Copyright © 2018年 Song. All rights reserved.
//

// 取自 https://www.cnblogs.com/kubixuesheng/p/4322410.html

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getLength(char *str) {
    int i = 0;
    while ('\0' != str[i]) {
        i++;
    }
    return i;
}

int strCompare(char *strMain, char *strSub, int index) {
    int iMain = index; // index = 0
    int jSub = 0;
    int lenMain = getLength(strMain); // 11
    int lenSub = getLength(strSub); // 4
    
    printf("main = %d \n",lenMain);
    printf("sub = %d \n",lenSub);
    
    while ((iMain >= 0 && iMain <= lenMain - 1) && ((jSub >= 0 && jSub <= lenSub - 1))){
        if (strMain[iMain] == strSub[jSub]) {
            iMain++;
            jSub++;
        }else{
            iMain = iMain - jSub + 1;//回到主串的下一个位置起，开始比较，每次重新开始顺次比较， ij 走的长度是一样的，如果从0开始，那么相减之后，故+1到下一位，如果是从1开始存，那么+2到下一位。
            jSub = 0;
        }
    }
    //如果匹配 ok，肯定子串先比完。
    if (jSub > lenSub - 1) { // 如果匹配ok，最后一个元素比较完毕之后，会进入iMain、jSub都加一，而后跳出while循环，所以当子串比较完毕后，jSub会比sub的长度大一 ( 4 > 4-1 )
        return iMain - lenSub;//得到的就是匹配 ok 后，主串里第一个和模式串第一个字符匹配的字符的位置
    }else{
        return 0;//匹配失败
    }
}

 int main(int argc, const char * argv[]) {
//     char *str1 = "sawtsafvda";
//     char *str2 = "safv";
     
     char *str1 = "ababcababaw";
     char *str2 = "abca";

     int i = strCompare(str1, str2, 11); // 从第0个位置开始判断

     printf("%d\n", i);

     return 0;
}
